package com.j2ee.spring.aop.xml;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 原理：
 * 		1、启动spring容器
 * 		2、spring容器实例化配置文件中的bean
 * 		3、spring容器解析aop:config，解析切入点表达式
 * 		4、spring容器会把切入点表达式与spring容器内部的类进行匹配，
 * 				如果匹配成功，则为该实例类创建代理对象，代理对象的方法体的形成过程就是通知+目标方法
 * 				如果匹配不成功，则报错——
 * 						Caused by: java.lang.IllegalArgumentException: warning no match for this type name: com.j2ee.spring.ao.xml.PersonDaoImpl [Xlint:invalidAbsoluteTypeName]
 * 		5、当客户端利用context.getBean获取某一个对象时，如果有代理对象，则返回代理对象，如果没有代理对象，则返回实例化对象
 * 说明：
 * 		spring容器根据目标类有没有实现接口，自动产生代理对象
 * 			如果目标类实现了接口，则用jdkproxy产生代理对象——代理目标类来实现接口
 * 			如果没有实现接口，则用cglib产生代理对象——继承自目标类
 * @author LC
 *
 */
public class PorsonDaoTest {
	
	@Test
	public void testPersonDao() {
		ApplicationContext context =  
				new ClassPathXmlApplicationContext("applicationContext.xml") ;
		PersonDao personDao = (PersonDao) context.getBean("personDao") ;
		personDao.savePerson() ;
	}

}
